<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      #root {
        width: 100vw;
        height: 100vh;
        display: flex;
        justify-content: center;
        align-items: center;
        flex-direction: column;
        gap: 20px;
        flex-wrap: wrap;
      }
    </style>
    <script src="../js/vue.js" type="text/javascript"></script>
  </head>
  <body>
    <!-- 
      自定义指令：
        1. 全局指令：Vue.directive('指令名',{})
        2. 局部指令：directives:{指令名:{}}

      自定义指令的钩子函数：
        1. bind:指令与元素绑定成功时调用
        2. inserted:指令所在元素被插入页面时调用
        3. update:指令所在模板被重新解析时调用
        4. unbind:指令与元素解绑时调用

        备注：
        1. 指令名定义时不加v-，使用时需要加v-
        2. 指令名如果是多个单词，需要使用kebab-case命名法，如v-big-number
     -->

    <!-- 
        需求1：实现一个指令，将某个元素放大10倍
        需求2：实现一个v-focus指令，自动获取焦点
      -->

    <div id="root">
      <h2>欢迎来到{{name}}</h2>
      <div>当前的值是:{{n}}</div>
      <div>十倍的值是:<span v-big="n"></span></div>
      <div>一百倍的值是:<span v-gbig="n"></span></div>
      <button @click="n++">n++</button>

      <hr />

      <input type="text" v-focus v-model="n" />
    </div>

    <script type="text/javascript">
      Vue.directive("gbig", function (el, binding) {
        console.log("\r\n------------gbig run--------------\r\n");
        el.innerText = binding.value * 100;
      });

      new Vue({
        el: "#root",
        data: {
          name: "Vue",
          n: 1,
        },
        directives: {
          //   "big-number"(el,binding) {},
          //   "big-number": {
          //     bind(el, binding) {},
          //     inserted(el, binding) {},
          //     update(el, binding) {},
          //   },
          //   big指令勾子函数什么时候会调用
          //   1  指令与元素绑定成功时
          //   2  指令所在的模板被重新解析时
          big(el, binding) {
            console.log("\r\n------------big run--------------\r\n");
            el.innerText = binding.value * 10;
          },
          focus: {
            bind() {
              console.log("\r\n------------focus bind run--------------\r\n");
            },
            inserted(el) {
              console.log(
                "\r\n------------focus inserted run--------------\r\n"
              );
              el.focus();
            },
            update() {
              console.log("\r\n------------focus update run--------------\r\n");
            },
          },
        },
      });
    </script>
  </body>
</html>
